iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0

記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。

教學來源:
Youtube-tutorial/ComponentsDemo/ComponentsDemo/

參考:
queryItems

Query string in GET API swift Hindi tutorial

Swift建立URL

1個Http Get 可以分成很多檔案管理 ,作者把檔案分成:


Utility -- > 實際跑http request的程式 。
就是URLSession.shared.dataTask .resume()


Common 裡面放 網址:
http://


Model 裡面放物件類別:
像是 request的參數 、 response的參數


ResourceAccessor放
整個http的總程式 :

步驟1:把全部http的字串組再一起 ,
步驟2:跑URLSession.shared.dataTask .resume()

2
http組再一起的時候,原本都是自己用字串在串。

http://0.0.0.0/test?color=red&item=apple

現在改成這個方法,先創建一個struct


Struct something: Encodable
{
 let  color, item:String?
}

然後 創建物件

Something("red","apple")

然後
Something("red","apple") 轉成 [URLQueryItem] 類型
(這邊比較難,先跳過,作者的範例程式很完整,改一下model和網址,就直接拿來用了)

然後

URLComponts (url: URL(http://0.0.0.0/test) , resolvingAgainsBaseURL: true) 
.queuyItems = [URLQueryItem]

最後URLComponts.url 就會是url了

3
URLComponts 會自動 把 中文換掉 變成
%E8%89%BE%E4%BD
之類的 。

但是如果本來就想保留特殊符號,像是 = 會變成 %3D
我要的是 = 而不是 %3D 。
找到方法:
URL decode in iOS

String.removingPercentEncoding

是String類型,不是url類型 。
所以String.removingPercentEncoding後 。

在換到URL (string: “String”)
就可以是原本的 = 了。

原本以為這樣有關係,其實沒什麼關係,不管是 = 還是%3D 都可以在瀏覽器GET網址。
但是用中文可能程式會出錯。

4

想來看http response 回傳的body ,但是只看到Optional(70 bytes)。

來找方法:
回傳有三個參數
(data,header,error)

第一個參數 只看到 70bytes
第二個參數: 看到response header
第三個參數 : 錯誤訊息

找到這個方法:

Any way to get the response body during HTTP errors?

let json = String(data: data, encoding: String.Encoding.utf8)

5 http response 回來的data參數

data 的 資料型態 是 Optional

所以把 Optional 轉成 自己設定的Struct
(自己設定的Struct像是自己訂了一個person,裡面有人名、電話、地址) ,

Person : Decodable
用decoder.decode 轉成自己設定的Struct Person 。

所以
decode -- >解碼
encode -- > 編碼
Codable -- > 都可以

Decode 應該就是 把某個資料型態 轉成自訂的資料型態 ,所以叫解碼 。
encode -- > 倒過來 ? (不清楚,先這樣猜)
Codable -- > 都可以

Data 資料型態:
https://developer.apple.com/documentation/foundation/data
A byte buffer in memory.
記憶體存的byte。

Codable
A type that can convert itself into and out of an external representation.
https://developer.apple.com/documentation/swift/codable

Decodable
https://developer.apple.com/documentation/swift/decodable
A type that can decode itself from an external representation.

Encodable
A type that can encode itself to an external representation.
https://developer.apple.com/documentation/swift/encodable


上一篇
AVFoundation、Qrcode 、Camera
下一篇
取得裝置資訊
系列文
iOS學習資源與筆記28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言